package com.demo.chapter11future;

import java.util.concurrent.CompletableFuture;

public class FutureDemo2 implements Runnable {

	CompletableFuture<Integer> re = null;

	public FutureDemo2(CompletableFuture<Integer> re) {
		this.re = re;
	}

	@Override
	public void run() {
		int myRe = 0;
		try{
			//线程执行到这里会阻塞，因为CompletableFuture中根本没有它锁需要的数据，这个CompletableFuture处于未完成状态。
			System.out.println("阻塞");
			myRe = re.get() * re.get();
			System.out.println("继续");
		}catch(Exception e){
			e.printStackTrace();
		}
		System.out.println(myRe);
	}

	public static void main(String[] args) throws Exception {
		final CompletableFuture<Integer> future = new CompletableFuture<>();
		new Thread(new FutureDemo2(future)).start();
		//模拟长时间的计算过程，当计算完成后，可以将最终数据载入CompletableFuture，并标记为完成状态。此时CompletableFuture已经完成，上面阻塞的线程可以继续执行了。
		Thread.sleep(1000);
		//告知完成结果
		future.complete(60);
	}

}
